#pragma once

/* CAC使用的lockyield策略 */
#include <compl.h>
#include <ddblk_plat.h>
/* incr 小->大 (有)*/
/* decr 大->小 (似乎没办法?) 再向前探测一个? */
SAI hword_t cac_next_helpquota(apdspeff_t target_eff, cid_t target_cid, apdspeff_t *pcur_eff, cid_t cur_cid, hword_t cur_quota){
	PARAM_USED(cur_cid, target_cid);
	
	/* if (cur_quota == 1){  target_eff += APDS_GET_NUMAEFF(cur_cid, target_cid); } */
	/* target_eff += APDS_GET_NUMAEFF(cur_cid, target_cid); */	/* 加上numa eff */
	/* FIXME: 忽略相差1的效率 ，相差2才能转交，这样可以微调有些核心 */
	if (*pcur_eff  < target_eff){
		/* 远大于自身，立即放弃　*/
		/* FIXME: aarch64 fc转移过程中性能下降? */
		return 0;
	}

	/* TODO: 快完成额度时主动移交给大核 */
	/* 要做到这种应该怎么做? 越接近0 降低自己的频率促成交换 */
	/* NUMA核心效率? 完成一定程度启用Numa核心效率对比 */
	
	/* for flat */
	// if (cur_quota == -1){ *pcur_eff -= 1; };

	/* 针对flat有没有优化? */
	
	
	/* FIXME: 在WSL上会有问题 */	
	/* FIXME: 这个规则有问题，临界区一长回收就会停不下来 */
	/* 同一核心reclaim规则, 直接回收额度 */
	/* 效率相同，只回收一次 */
/* 	if ((*pcur_eff == target_eff) && (target_cid == cur_cid)){
		*pcur_eff += 1;
		return cur_quota + APDS_GET_COREQUOTA(cur_cid) - 1;
 	}  */



	return cur_quota - 1;
}
